package dao

import (
	"web08_35_tushu/model"
	"web08_35_tushu/utils"
)

//AddCart 数据库添加购物车，同时把购物项一起加进数据库里
func AddCart(cart *model.Cart) error {
	sqlStr := "insert into carts(id,total_count,total_amount,user_id) values(?,?,?,?)"
	_, err := utils.Db.Exec(sqlStr, cart.CartID, cart.GetTotalCount(), cart.GetTotalAmount(), cart.UserID)
	if err != nil {
		return err
	}
	//获取购物车所有购物项
	cartItems := cart.CartItems
	for _, cartItem := range cartItems {
		AddCartItem(cartItem)
	}
	return nil
}

//GetCartByUserID 通过用户ID查询对应购物车
func GetCartByUserID(userID int) (*model.Cart, error) {
	//sql获取用户ID对应的购物车
	sql := "select id,total_count,total_amount,user_id from carts where user_id = ?"
	row := utils.Db.QueryRow(sql, userID)
	//创建个购物车用来装查出来的数据
	cart := &model.Cart{}
	err := row.Scan(&cart.CartID, &cart.TotalCount, &cart.TotalAmount, &cart.UserID)
	if err != nil {
		return nil, err
	}
	//通过购物车id把所有的购物项查出来
	cartItems, _ := GetCartItemsByCartID(cart.CartID)
	//把购物项切片装进购物车里
	cart.CartItems = cartItems
	return cart, nil
}

//UpdateCart 更新购物车，重新把内容计算一遍并写入
func UpdateCart(cart *model.Cart) error {
	sql := "update carts set total_count = ? , total_amount = ? where id = ?"
	_, err := utils.Db.Exec(sql, cart.GetTotalCount(), cart.GetTotalAmount(), cart.CartID)
	if err != nil {
		return err
	}
	return nil
}

//DeleteCartByCartID 删除购物车，通过购物车ID删除购物车
func DeleteCartByCartID(cartID string) error {
	//因为购物项关联了购物车ID，所以要先删除购物项
	err := DeleteCartItemsByCartID(cartID)
	if err != nil {
		return err
	}
	sql := "delete from carts where id = ?"
	_, err2 := utils.Db.Exec(sql, cartID)
	if err2 != nil {
		return err2
	}
	return nil
}
